#include "nuclei.h"
#include "log.h"
#include <stdexcept>

nuclei::nuclei(const std::string &host, log_out *logging, bool file_write)
    : logging(logging), host(host), file_write(file_write) {
  // Проверяем установлена ли программа nuclei
  logging->write_log(log_out::warring, "Проверка программы nuclei");
  if (system("nuclei -version") == 0) {
    logging->write_log(log_out::ok, "Программа nuclei установлена");
  } else {
    throw std::runtime_error("Программа nuclei не установлена!");
  }

  if (std::filesystem::is_directory(dir_1)) {

    logging->write_log(
        log_out::ok,
        "Дирректория (plugins_nuclei/honeypots-detection) инициализированна!");
  } else {
    logging->write_log(log_out::no_ok,
                       "Дирректория (plugins_nuclei/honeypots-detection) не "
                       "инициализированна!");

    throw std::runtime_error(
        "Для установки плагина запустите команду: $./install.sh");
  }
}

void nuclei::scan_honeypot() const {
  std::ostringstream command_stream;
  logging->write_log(log_out::ok,
                     "Запускаем сканирование honeypots-detection.");
  if (file_write) {
    logging->write_log(
        log_out::ok,
        "Результат сканирования будет записан в файл nuclei_honeypot.log");
    command_stream << "nuclei -u " << host
                   << ":22 -t plugins_nuclei/honeypots-detection/templates -vv "
                      "-o nuclei_honeypot.log";
  } else {
    command_stream
        << "nuclei -u " << host
        << ":22 -t plugins_nuclei/honeypots-detection/templates -vv ";
  }
  int result = system(command_stream.str().c_str());
  if (result != 0) {
    logging->write_log(log_out::no_ok, "Запуск nuclei не удался!");
  }
}

void nuclei::detected_ssh() const {
  std::ostringstream command_stream;

  logging->write_log(log_out::ok, "Запускаем сканирование detected-ssh.");
  if (file_write) {
    logging->write_log(
        log_out::ok,
        "Результат сканирования будет записан в файл nuclei_ssh.log");

    command_stream << "nuclei -u " << host
                   << "-t javascript/enumeration -vv -o nuclei_ssh.log";
  } else {
    command_stream << "nuclei -u " << host << "-t javascript/enumeration -vv";
  }
  int result = system(command_stream.str().c_str());
  if (result != 0) {
    logging->write_log(log_out::no_ok, "Запуск nuclei не удался!");
  }
}
